package сontrol;

import model.*;

/**
 * Класс-контроллер
 */
public class HlpController {           
    /**
     * Множество возможных значений инструкций    
    */ 
    public enum Instructions {
            ADD,DELETE,UPDATE,SEARCH, LOAD, SAVE
	}
    
    /**
     * Проверка возможности преобразование строки в число
     * @param str передаваемая строка
     * @return OperationResult результат операции
     */    
        public static OperationResult strToInt(String str){
            int number = -1;
            try{
                number = Integer.parseInt(str);
                if (number == 0)
                    return new OperationResult(-3,"Некорректное значение атрибута: Номер рейса");
                else
                    return new OperationResult(1,"");
            }
            catch (NumberFormatException e){
                return new OperationResult(-3,"Некорректное значение атрибута: Номер рейса");
            }
        }
       
    /**
     * Метод выполняющий возможные проверки
     * @param instruction вид иструкции
     * @param flight рейс для проверки правильности заполнения полей
     * @param flights рейсы для проверки уникальности добавляемого рейса    
     * @return OperationResult результат операции
    */    
        public static OperationResult execute(Instructions instruction,Flight flight,Flights flights){
            if (instruction == null)
                return new OperationResult(-1,"Пустой параметр: тип операции");

            if (flight == null)
                return new OperationResult(-1,"Пустой параметр: атрибуты");            
           
            if (flight.getFlightNumber() <= 0){          
                return new OperationResult(-3,"Некорректное значение атрибута: Номер рейса");    
            }            
                
            if(instruction == Instructions.DELETE){                         
                 return new OperationResult(1,"");
            }
            else{
                if(flight.getAircraft().trim().isEmpty())
                    return new OperationResult(-3,"Некорректное значение атрибута: Аэробус");
              
                if( flight.getRoute().getPointDepart().getTown().trim().isEmpty())
                    return new OperationResult(-3,"Некорректное значение атрибута: Город вылета");    
                    
                if( flight.getRoute().getPointDepart().getAirport().trim().isEmpty())
                    return new OperationResult(-3,"Некорректное значение атрибута: Аэропорт вылета");    

                if( flight.getRoute().getPointArrive().getTown().trim().isEmpty())
                    return new OperationResult(-3,"Некорректное значение атрибута: Город прилета");    
                    
                if(flight.getRoute().getPointArrive().getAirport().trim().isEmpty())
                    return new OperationResult(-3,"Некорректное значение атрибута: Аэропорт прилета");    
                
                if(flight.getRoute().getPointDepart().getAirport().equals(flight.getRoute().getPointArrive().getAirport()))
                    return new OperationResult(-3,"Некорректное значение атрибута: Аэропорт прилета не должен совпадать с аэропортом вылета");    
                
                if(flight.getTravelTime().equals(viewer.Convertor.toDate("0","0"))){
                    return new OperationResult(-3,"Некорректное значение атрибута: Время полета");    
                }
 
               if(instruction == Instructions.ADD) 
                    if (flights.checkFlightsNumber(flight.getFlightNumber())){
                        return new OperationResult(0,"");                       
                    }
                    else    
                        return new OperationResult(-1,"Рейс с таким номером уже существует");
                }
            return new OperationResult(10,"Спасибо, все корректно");
        }       
}
